package lc20240429;

import java.util.Scanner;

//将整数转为ip地址，ip地址转为整数。
public class IntegerToIp {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        long num = Long.parseLong(sc.next());
        System.out.println(ipToInt(s));
        System.out.println(IntToIP(num));
    }

    //ip地址转长整数
    public static long ipToInt(String ip) {
        //split分割方法，正则表达式\\.  表示从.开始分割。
        String[] str = ip.split("\\.");
        long res = 0L;
        int n = 24;
        for (String s : str) {
            //左移操作，第一个字符串左移24，依次递减。
            res += Long.parseLong(s) << n;
            n -= 8;
        }
        return res;
    }

    public static String IntToIP(long num) {
        //将数字转换为二进制字符串
        String s = Long.toBinaryString(num);
        //注意StringBuilder的应用。
        StringBuilder stringBuilder = new StringBuilder();

        int zeroNum = 32 - s.length();
        //前面的空位补0
        for (int i = 0; i < zeroNum; i++) {
            stringBuilder.append('0');
        }
        stringBuilder.append(s);

        StringBuilder ipAddress = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            int start = 8 * i;
            int end = 8 * (i + 1);
            String temp = stringBuilder.substring(start, end);
            //parseInt方法，第二个参数是说明从几进制开始转。这里是二进制整数转为十进制。
            ipAddress.append(Integer.parseInt(temp, 2));
            if (i < 3) {
                ipAddress.append('.');
            }
        }
        return ipAddress.toString();
    }
}
